{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Cox-CC\n",
    "\n",
    "In this notebook we will train the [Cox-CC method](http://jmlr.org/papers/volume20/18-424/18-424.pdf).\n",
    "We will use the METABRIC data sets as an example\n",
    "\n",
    "A more detailed introduction to the `pycox` package can be found in [this notebook](https://nbviewer.jupyter.org/github/havakv/pycox/blob/master/examples/01_introduction.ipynb) about the `LogisticHazard` method.\n",
    "\n",
    "The main benefit Cox-CC (and the other Cox methods) has over Logistic-Hazard is that it is a continuous-time method, meaning we do not need to discretize the time scale."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn_pandas import DataFrameMapper\n",
    "\n",
    "import torch\n",
    "import torchtuples as tt\n",
    "\n",
    "from pycox.datasets import metabric\n",
    "from pycox.models import CoxCC\n",
    "from pycox.evaluation import EvalSurv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "## Uncomment to install `sklearn-pandas`\n",
    "# ! pip install sklearn-pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(1234)\n",
    "_ = torch.manual_seed(123)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dataset\n",
    "\n",
    "We load the METABRIC data set and split in train, test and validation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = metabric.read_df()\n",
    "df_test = df_train.sample(frac=0.2)\n",
    "df_train = df_train.drop(df_test.index)\n",
    "df_val = df_train.sample(frac=0.2)\n",
    "df_train = df_train.drop(df_val.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x0</th>\n",
       "      <th>x1</th>\n",
       "      <th>x2</th>\n",
       "      <th>x3</th>\n",
       "      <th>x4</th>\n",
       "      <th>x5</th>\n",
       "      <th>x6</th>\n",
       "      <th>x7</th>\n",
       "      <th>x8</th>\n",
       "      <th>duration</th>\n",
       "      <th>event</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>5.603834</td>\n",
       "      <td>7.811392</td>\n",
       "      <td>10.797988</td>\n",
       "      <td>5.967607</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>56.840000</td>\n",
       "      <td>99.333336</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>5.284882</td>\n",
       "      <td>9.581043</td>\n",
       "      <td>10.204620</td>\n",
       "      <td>5.664970</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>85.940002</td>\n",
       "      <td>95.733330</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>6.654017</td>\n",
       "      <td>5.341846</td>\n",
       "      <td>8.646379</td>\n",
       "      <td>5.655888</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>66.910004</td>\n",
       "      <td>239.300003</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>5.456747</td>\n",
       "      <td>5.339741</td>\n",
       "      <td>10.555724</td>\n",
       "      <td>6.008429</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>67.849998</td>\n",
       "      <td>56.933334</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>5</td>\n",
       "      <td>5.425826</td>\n",
       "      <td>6.331182</td>\n",
       "      <td>10.455145</td>\n",
       "      <td>5.749053</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>70.519997</td>\n",
       "      <td>123.533333</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         x0        x1         x2        x3   x4   x5   x6   x7         x8  \\\n",
       "0  5.603834  7.811392  10.797988  5.967607  1.0  1.0  0.0  1.0  56.840000   \n",
       "1  5.284882  9.581043  10.204620  5.664970  1.0  0.0  0.0  1.0  85.940002   \n",
       "3  6.654017  5.341846   8.646379  5.655888  0.0  0.0  0.0  0.0  66.910004   \n",
       "4  5.456747  5.339741  10.555724  6.008429  1.0  0.0  0.0  1.0  67.849998   \n",
       "5  5.425826  6.331182  10.455145  5.749053  1.0  1.0  0.0  1.0  70.519997   \n",
       "\n",
       "     duration  event  \n",
       "0   99.333336      0  \n",
       "1   95.733330      1  \n",
       "3  239.300003      0  \n",
       "4   56.933334      1  \n",
       "5  123.533333      0  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Feature transforms\n",
    "We have 9 covariates, in addition to the durations and event indicators.\n",
    "\n",
    "We will standardize the 5 numerical covariates, and leave the binary variables as is. As variables needs to be of type `'float32'`, as this is required by pytorch."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "cols_standardize = ['x0', 'x1', 'x2', 'x3', 'x8']\n",
    "cols_leave = ['x4', 'x5', 'x6', 'x7']\n",
    "\n",
    "standardize = [([col], StandardScaler()) for col in cols_standardize]\n",
    "leave = [(col, None) for col in cols_leave]\n",
    "\n",
    "x_mapper = DataFrameMapper(standardize + leave)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_mapper.fit_transform(df_train).astype('float32')\n",
    "x_val = x_mapper.transform(df_val).astype('float32')\n",
    "x_test = x_mapper.transform(df_test).astype('float32')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We need no label transforms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "get_target = lambda df: (df['duration'].values, df['event'].values)\n",
    "y_train = get_target(df_train)\n",
    "y_val = get_target(df_val)\n",
    "durations_test, events_test = get_target(df_test)\n",
    "val = tt.tuplefy(x_val, y_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((305, 9), ((305,), (305,)))"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val.shapes()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With `TupleTree` (the results of `tt.tuplefy`) we can easily repeat the validation dataset multiple times. This will be useful for reduce the variance of the validation loss, as the validation loss of `CoxCC` is not deterministic."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((610, 9), ((610,), (610,)))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val.repeat(2).cat().shapes()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Neural net\n",
    "\n",
    "We create a simple MLP with two hidden layers, ReLU activations, batch norm and dropout. \n",
    "Here, we just use the `torchtuples.practical.MLPVanilla` net to do this.\n",
    "\n",
    "Note that we set `out_features` to 1, and that we have not `output_bias`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "in_features = x_train.shape[1]\n",
    "num_nodes = [32, 32]\n",
    "out_features = 1\n",
    "batch_norm = True\n",
    "dropout = 0.1\n",
    "output_bias = False\n",
    "\n",
    "net = tt.practical.MLPVanilla(in_features, num_nodes, out_features, batch_norm,\n",
    "                              dropout, output_bias=output_bias)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training the model\n",
    "\n",
    "To train the model we need to define an optimizer. You can choose any `torch.optim` optimizer, but here we instead use one from `tt.optim` as it has some added functionality.\n",
    "We use the `Adam` optimizer, but instead of choosing a learning rate, we will use the scheme proposed by [Smith 2017](https://arxiv.org/pdf/1506.01186.pdf) to find a suitable learning rate with `model.lr_finder`. See [this post](https://towardsdatascience.com/finding-good-learning-rate-and-the-one-cycle-policy-7159fe1db5d6) for an explanation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = CoxCC(net, tt.optim.Adam)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEOCAYAAAB8aOvdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3iUVfr/8fedSQ9phISSEAi9CQEDQbGhoiwoWBGs2NBdYf3quj/Zpq6ru66NXUVlsYsKq9hQUWxgBQQEpUPoAZEQpISQOvfvj5mwIWYyk2Qmk4T7dV25mKecmU8i5uY5z3nOEVXFGGOMqU5IsAMYY4xpvKxIGGOM8ciKhDHGGI+sSBhjjPHIioQxxhiPrEgYY4zxKOBFQkSGi8h6EckRkcnVHE8XkfkislxEfhCREdUcLxCROwKd1RhjzLECWiRExAE8AfwK6AWME5FeVU77M/CaqvYHxgJPVjk+BfggkDmNMcZUL9BXEoOAHFXdrKolwCxgdJVzFIhzv44HdlUcEJELgM3A6gDnNMYYU41AF4lUYEel7Vz3vsruAa4UkVxgLjAJQERigDuBvwY4ozHGGA9CA/z+Us2+qvOAjANeUNVHROQkYIaI9MFVHKaoaoFIdW/j/gCRCcAEgJiYmBN79Ojhn+TGGHOcWLZs2V5VTa7uWKCLRC7QvtJ2GpW6k9yuB4YDqOpCEYkEWgHZwCUi8iCQADhFpEhVp1ZurKrTgekAWVlZunTp0oB8I8YY01yJyDZPxwJdJJYAXUUkA9iJ68b05VXO2Q6cBbwgIj2BSCBPVU+tOEFE7gEKqhYIY4wxgRXQexKqWgZMBOYBa3GNYlotIveKyCj3ab8DbhSR74GZwHi1qWmNMaZRkOb0+9i6m4wxpvZEZJmqZlV3LNDdTcYYUy+lpaXk5uZSVFQU7ChNXmRkJGlpaYSFhfncxoqEMaZRy83NJTY2lo4dO1LTSEdTM1UlPz+f3NxcMjIyfG5nczcZYxq1oqIikpKSrEDUk4iQlJRU6ysyKxLGmEbPCoR/VPdzXL3rQI1trEgYY8xx7OVF22s8bkXCGGO82L9/P08+WXXuUe9GjBjB/v37a91u/PjxzJ49u9bt6qK03FnjcSsSxhjjhaciUV5eXmO7uXPnkpCQEKhYfuGtSNjoJmNMk/HXd1ezZtdBv75nr3Zx3H1+7xrPmTx5Mps2bSIzM5OwsDBatGhB27ZtWbFiBWvWrOGCCy5gx44dFBUVceuttzJhwgQAOnbsyNKlSykoKOBXv/oVp5xyCt988w2pqam88847REVFec336aefcscdd1BWVsbAgQN56qmniIiIYPLkycyZM4fQ0FDOOeccHn74YV5//XX++te/4nA4iI+P54svvvD6/mXlNT8rZ0XCGGO8eOCBB1i1ahUrVqxgwYIFjBw5klWrVh0dSvrcc8/RsmVLjhw5wsCBA7n44otJSko65j02btzIzJkzefrppxkzZgxvvPEGV155ZY2fW1RUxPjx4/n000/p1q0bV199NU899RRXX301b731FuvWrUNEjnZp3XvvvcybN4/U1FSfu7lK7ErCGNNcePsXf0MZNGjQMc8aPPbYY7z11lsA7Nixg40bN/6iSGRkZJCZmQnAiSeeyNatW71+zvr168nIyKBbt24AXHPNNTzxxBNMnDiRyMhIbrjhBkaOHMl5550HwJAhQxg/fjxjxozhoosu8ul7sXsSxhjjZzExMUdfL1iwgE8++YSFCxfy/fff079//2qfRYiIiDj62uFwUFZW5vVzPE2bFBoayrfffsvFF1/M22+/zfDhwwGYNm0a9913Hzt27CAzM5P8/Hyvn2HdTcYYU0+xsbEcOnSo2mMHDhwgMTGR6Oho1q1bx6JFi/z2uT169GDr1q3k5OTQpUsXZsyYwemnn05BQQGFhYWMGDGCwYMH06VLFwA2bdpEdnY22dnZvPvuu+zYseMXVzRVWXeTMcbUU1JSEkOGDKFPnz5ERUXRunXro8eGDx/OtGnT6Nu3L927d2fw4MF++9zIyEief/55Lr300qM3rm+++Wb27dvH6NGjKSoqQlWZMmUKAL///e/ZuHEjqspZZ51Fv379vH6Gt+4mmwXWGNOorV27lp49ewY7RrNR9ed5/uNf8d5vT/U4C6zdkzDGmOOYPSdhjDGN1C233MLXX399zL5bb72Va6+9tsEy2D0JY0yTp6rNcpK/J554okE/r7rbC95GN1l3kzGmUYuMjCQ/P9/jcFDjm4r1JCIjI4/Zb91NxpgmLS0tjdzcXPLy8oIdpcmrWJmusqAXCREZDvwbcADPqOoDVY6nAy8CCe5zJqvqXBEZBjwAhAMlwO9V9bNA5zXGNC5hYWG1WknN1E5pMB+mExEH8AQwDMgFlojIHFVdU+m0PwOvqepTItILmAt0BPYC56vqLhHpA8wDUgOZ1xhjjjfBnpZjEJCjqptVtQSYBYyuco4Cce7X8cAuAFVdrqq73PtXA5EiEoExxhi/CXZ3Uyqwo9J2LpBd5Zx7gI9EZBIQA5xdzftcDCxX1eJAhDTGmOORqnrtbgr0lUR1Y9aqJhoHvKCqacAIYIaIHM0lIr2BfwI3VfsBIhNEZKmILLUbW8YY47syp/cRY4EuErlA+0rbabi7kyq5HngNQFUXApFAKwARSQPeAq5W1U3VfYCqTlfVLFXNSk5O9nN8Y4xpvrx1NUHgi8QSoKuIZIhIODAWmFPlnO3AWQAi0hNXkcgTkQTgfeAPqvo1xhhj/MpbVxMEuEioahkwEdfIpLW4RjGtFpF7RWSU+7TfATeKyPfATGC8up6amQh0Af4iIivcXymBzGuMMccTX64kAv6chKrOxTWstfK+uyq9XgMMqabdfcB9gc5njDHHq8bQ3WSMMaaR8jZvE1iRMMaY45a3GWDBioQxxhy37ErCGGOMR3ZPwhhjjEfW3WSMMcYj624yxhjjkXU3GWOM8ci6m4wxxnhk3U3GGGM8su4mY4wxHlmRMMYY41HQZ4E1xhjTeNmVhDHGGI+sSBhjjPHIupuMMcZ4ZFcSxhhjPCotsyJhjDHGg1KndTcZY4zxoLTcSZhDajzHioQxxhynSsuchDlqLgMBLxIiMlxE1otIjohMruZ4uojMF5HlIvKDiIyodOwP7nbrReTcQGc1xpjjSZlTvRaJ0EAGEBEH8AQwDMgFlojIHFVdU+m0PwOvqepTItILmAt0dL8eC/QG2gGfiEg3VS0PZGZjjDlelPiru0lEQkSkv4iMFJEzRaS1jxkGATmqullVS4BZwOgq5ygQ534dD+xyvx4NzFLVYlXdAuS4388YY4wf+NLdVOOVhIh0Bu4EzgY2AnlAJNBNRAqB/wAvqqqncVSpwI5K27lAdpVz7gE+EpFJQIz7syraLqrSNrWajBOACQDp6ek1fTvGGGMq8aW7yduVxH3Ay0BnVT1XVa9U1UtUtS8wCte//K+qoX111zFVx1yNA15Q1TRgBDBDREJ8bIuqTlfVLFXNSk5O9vLtGGOMqVBS7iTUS3dTjVcSqjquhmN7gH95yZALtK+0ncb/upMqXA8Md7/nQhGJBFr52NYYY0wdlZY5Ca9nd9NFNR1X1Te9ZFgCdBWRDGAnrhvRl1c5ZztwFvCCiPTE1Z2VB8wBXhWRR3HduO4KfOvl84wxxvjIH6Obznf/mQKcDHzm3h4KLABqLBKqWiYiE4F5gAN4TlVXi8i9wFJVnQP8DnhaRG7D1Z00XlUVWC0irwFrgDLgFhvZZIwx/lPqh+6mawFE5D2gl6r+6N5ui2toq1eqOhfXsNbK++6q9HoNMMRD2/uB+335HGOMMbVT4seH6TpWFAi3n4BudQ1mjDEm+MqcWr97EpUsEJF5wExcXUJjgfn1i2eMMSaYSsudxEbWXAZ8KhKqOlFELgROc++arqpv1TOfMcaYIPKlu6k203J8BxxS1U9EJFpEYlX1UL0SNgIlZU7mrvyRM3umEBcZVqu2CzflEx8VRq92cd5PNsaYRsZv3U0iciOup5pbAp1xPfk8DdfQ1Sbr58Ml3PzyMhZv2cfQ7sk8e81AQkJqvtNfYcvew1z17GLKVbkyuwN3nNOd+OjaFRljjAkmX0Y3+Xrj+hZcI5AOAqjqRlzDYpusnD0FXPDk1yzfvp8L+6cyf30eU+fn+Nz+wQ/XER4awuWD0nll8TbOfGQBryzeRs6eAkp8WO3JGGOCrd5zN1VSrKolIq6KIyKhVDNFRlOxcFM+E2YsJSI0hJkTBjMgPQGAKZ9soF/7BE7vVvP0Hku37uODVbu5fVg3fntWVy7PTucvb6/iT2+tAiBEIDUxijEntmfSWV0D/v0YY0xdlPpxqvDPReSPQJSIDAN+A7xbz3xBUVRazm3/XUFybAQvXTeItMRoAO6/sA9rdh3k1lnLeW/SKUf3V6Wq3D93La3jIrjh1AwAereLZ/bNJ7Ny5wE27y1gS95hlm3/mUc+3kBCdBhXndSxob49Y4zxmS8r0/laJCbjmmNpJXATrofjnqlXugBbmXuAFpGhZLSKOWb/f5fsYPfBIl65IfuYQhAdHsq0q05k1ONfcd7jX9EmLpLIMAfR4Q7O7JHC5dnpRIeHMnflbpZv38+DF/clOvx/P76QEKFf+wT6tXddlZQ7lQkvLeWed9eQnhTj9erEGGMamt9WplNVp6o+raqXumeBfdo9dUajNXHmd4ybvoj9hSVH9xWVlvPE/BwGZbTk5M5Jv2iT0SqGZ67J4vRuyaS3jCY2MpT9haXc9/5aTvnnfKZ+tpF/friOHm1iufjEtBo/3xEi/Htcf7q1jmXiK9+x4acmPxDMGNPM+K27SUSG4Fr3oYO7jQCqqp3qmTEgjpSUs31fIaow+Y2VPHXlAESEVxZvZ8+hYh4b15+K+ytVZXdKIrvTsQVk2bZ9TP0sh4c/2gDAS9cNwuHDKKgWEaE8e00WFzzxNde9sIS3bxlCqxYR9f8GjTGmnlTVp+4mX0c3PQs8CpwCDASy3H82Spv3FqAKgzq25MPVu5m1ZAdHSsp5asEmTu6cxOBOv7yKqMmJHVry/LWDeG/SKTw2rj+n1aLrqF1CFM9ck8XegmJumrGM4jKbo9AYE3zlTkUVv83ddEBVP1DVPaqaX/FV/5iBkbOnAIB7RvXm1K6t+Ou7q/nb+2vYW1DMbcPqPuVUn9R4RvVrV+t2fdMSePjSfizb9jN/eHMljbynzhhzHChzun4P1atIiMgAERkAzBeRh0TkpIp97v2N0qa8w4QIdEqO4ZFL+xEdHsqri7dzatdWDOzYMiiZzuvbjtvO7sab3+1k2uebg5LBGGMqlJS7nueq7+imR6psZ1V6rcCZtQ3WEDbtKaB9y2giwxxEhjl4+NK+3PnGSn5/bveg5vrtWV3IySvgwXnryGgVw/A+bWrV3ulUdu4/QqhDiAh1EBEacsy9EUeIVPuvgs15Bby8aDuxkaF0So6hc3ILuqS0IDLMUe/vyRjTNJWWVRSJety4VtWhACLSSVWP+eeviDTKm9YAm/IK6Jzc4uj2mT1a8+0fUzzerG4oIsJDl/Rl+75CJs38jgcv6cuF/WseJQWw+0ARs5ft4L9Ld7Bj3xGP54WGCGf3bM3l2emc0qUVh4rKeOyzjbz4zVZCRCh1Oqno6WrVIoInrxjAoAzPV1aLN+fz1OebaBMXyS1Du9C+ZfXPjhhjmh5fu5t8fU5iNlC1e+l14MTaBgu0cqeyee/hX9xcDnaBqBAZ5uClawdx08tLue2/37Nj3xEmndnlF/kKS8r4ZO0e3l6+kwXr9+BUOKlTEhNO7USoI4Ti0nKKy5yUV7q/sedgMe+s2MmHq3eT3jKaQ0Wl7D9SymVZ7bn9nG7ERYaxLb+QjXsO8chHG7j86UXcfX4vrhzc4ZjPX7/7EA9+uI5P1+0hOTaCbzbl88Z3uYwdmM7EM7vQOi6ywX5expjAqJg+qF4r04lID6A3EF9lves4XGtRNzq5PxdSUuakS6UricYmPjqMl67LZvIbP/DoxxvYvq+Q4b3bsP9IKfsLS1i96yDzVu+msKSctvGR3HR6Zy7Lak/HKg8GVucPI3rw4ardvLZ0B+GOGO44tzu928UfPd69TSzd28RyatdkbvvvCv7yzmp+yD1AZnoCq3YeZNXOA6zedYCYiFDuHN6Da4d0ZN/hEqbOz2Hmt9t5bekOrh2Swa/P6Ex8lE1oaExTVeq+J1HfWWC7A+cBCfxvvWuAQ8CNdY8XOBUjmzqneP+FGkzhoSE8MqYfaS2jeezTjcxelnv0WFxkKKMz2zGqXyrZGS19npkWICLUwejMVEZnptZ4XnxUGM9cncW/PtnAY5/l8PqyXOIiQzkhLZ5JZ3Zl/MkdSYwJB1zDeP9+4QncfFpnpnyygf98sYlZS7YzcWgXxg5Kp0VEbWacN8Y0Bn7pblLVd4B3ROQkVV1YlyAiMhz4N+AAnlHVB6ocnwIMdW9GAymqmuA+9iAwEtcorI+BW7096X20SDTiK4kKIsLtw7ox8oS2FJeVkxAVTnx0GLERobUqDHUVEiLcfk53RmWmEhEaQlpiVI3dculJ0Uy5LJMbTs3ggQ/Wcd/7a7nv/bW0iAglJTaCNvGRnNkjhVH92pFiXVLGNGp+6W6qZIeIvIVrunAFvsL1Czu3pkYi4gCeAIYBucASEZmjqmsqzlHV2yqdPwno7359svvz+roPfwWcDiyo6TM35RXQqkU4CdHhPn5rwde9TWxQP79LSu0Kau928cy4PpuFm/JZvuNn9hwsJu9QMZvyCrjv/bX8fe5ahnRpxah+7RjWq3WN/y0KisuY9e12BndKok9qvMfzjDH+VXEl4a81rp8HXgUudW9f6d43zEu7QUBOxcgoEZkFjAbWeDh/HHC3+7Xiuu8RjmsakDDgJ29Bc/YUNImriObgpM5JnFRlDqycPQW8s2In76zYxe9n/0BoiHBS5ySG92nD4E5JZCTFEBIilJU7+e/SHUz5eAN7C0qICA3hwUv6eu0mM8b4R2m5H4bAVpKiqs9X2n5BRP7Ph3apwI5K27lAdnUnikgHIAP4DEBVF4rIfOBHXEViqqqu9faBm/IOM7JvWx+imUDoktKC353TnduHdWPlzgN8sGo3H67afXStjdjIUPqmxbPnYDEb9xQwsGMij47JZOr8HG6dtYKNPxVw+7BuDdLdZszxrNTP3U15InIlMNO9PQ7wZVqO6j7d0z2FscBsVS0HEJEuQE+g4kGCj0XkNFX94pgPEJmAa2lV0tI74DhS2qhHNh0vRIS+aQn0TUvg/53bnU15BXy3bT/f5+7nh9wDhDpCmHblAM7t3QYRYXCnJO56ZxVT5+fw7ZZ9JMdFUFhcxuGSctISozi9WzKndU0+ejPdG1XXvDSVi42qsi2/kO9z97PvcAknpMbTJzXeHio0x6VSPz8ncR0wFZji3v7avc+bXKB9pe00YJeHc8fiWia1woXAIlUtABCRD4DBwDFFQlWnA9MBep6QqUeofR+7CSwRoUtKLF1SYhkzsH2154SHhvCPi06gR5tYnvt6K/mHi4mJCCUyzMFn6/bw5nc7EXHNgzWwQyIDOiQyID2RmAgHW/cWuhZ72nv4f195hykoKSM+KoyW0eHERoayZe9hDhaVHfO5oSFCz7ZxXNA/lasGdyA81NfpzIxp2iquJPxyT0JVtwOj6pBjCdBVRDKAnbgKweVVTxKR7kAiUHkE1XbgRhH5B64rktOBf9X0YcXub7qzFYkmSUQYPySD8UMyjtlf7lR+yN3PgvV5fJWzl5cWbeOZr7ZU0x7axUfRKTmGiwakEh8Vxv4jpew7XMKBI6WM7NuWvmkJnJAaT3JsBD/kHmD59p9ZuDmfv723hpcWbmXy8B4M79Om0Tx8aUygVNyT8Et3k4ikAY9Ty9FNqlomIhOBebiGwD6nqqtF5F5gqarOcZ86DphVZXjrbFxzQ610f+aHqlrjkqlFZeUkhDtoa8MvmxVHiNA/PZH+6YncNqwbJWVO1vx4kO+2/UxxmZOMVjFktIqhQ1J0rbqOhvWKZFiv1gAsWL+Hv89dy69f+Y7+6Qlcf0oG5/RqY1cWptnyd3dTXUc3oapzcS13WnnfXVW276mmXTmupVJ9VlzqpFNyjN30bObCQ0PIbJ9ApnupWH84o3sKp3RpxevLcpn6WQ4TX11OqxbhXJrVnjN7pNAuIYrWsRGEevkfypimwq/dTUByHUc3NajiRj4dh2ncQh0hjBuUzpis9nyxMY9XF2/nP59v4qkFmwAIEdfEiI4QQRUUJSU2kjO6JzO0Rwr90hJwhAhOp3KwqJSScieJ0eFe/6VmTDD4tbsJ2FvH0U0NqrTcac9ImHpzhAhDu6cwtHsKew4WsXb3IXbtP8KP+4/w08FinKpU3LLYnHeYJ+bn8PhnOcRHhREicOBIKc5KHafxUWEkxYTTOi6SdglRtEuIpGvrWEb0aWNXJiZoAjm6SYFv8G10U4OzkU3Gn1LiIr1OMbK/sITPN+SxaHM+jhAhMdr1xH+YQ9h3uIR9h0vILyhh98Eivtm0l58OFuFUeLJNLPeM6l3r5XSN8YfGMrqpwVmRMA0tITrcp0kVK5SVO/l4zU/c9/5axk5fxHl92zJ2YDopcRG0ahFBQlSY3VczAefv0U0ZwCSgY+U2qtqoCkfLmHDSk2xhHNO4hTpC+NUJbRnaI4X/fL6ZJxfk8N4PPx49HhPu4NohGUw4vRNxkTYduwkMfy869DbwLPAu4KxPsEBKTYgiItSenjVNQ2SYg1vP7soVg9PJ2VNA3iHXRInLtv3M1Pk5vLJ4G5POdB23v9fG30rK/LPGdYUiVX2snpmMMdVo1cLVzVThulMyuCl3Pw98sI5731vDAx+uo1vrFvRoE0fPtnGMzmx3zPnG1EVpuZPQEPH64KivReLfInI38BFQXLFTVb+re0RjjCd90xJ45YZsvs7J54uNeaz98SCfb8hj9rJcHp63nisHpzPhtM4kx1qxMHVT5lSfhmf7WiROAK7C9QR0RXeTureNMQEgIpzStRWndG11dF/OngKenJ/Ds19tYcaibVyR3YGbTutkizyZWispc3rtagLfi8SFQCdVLalXKmNMvXRJacGjl2Uy6ayuTP0shxe+2cqMRdsYO7A9N5/emXYJUcGOaJqI0nKnT1cSvj7J8z2uda6NMY1ARqsYHhnTj/m/O4OL+qfy6uLtnP7QfB77dCPlzhpX+DUGgLJy/3Y3tQbWicgSjr0n0aiGwBpzvElPiuaBi/sy8cwu/PPD9Tz68QaWbN3HlMsy7ea2qVFpuZOwUP91N93t/RRjTLCkJUbz2NhMhnRO4u45qxnx7y/599j+v1he1pgKJeVOwkL81920FPhSVT/HtZxoPK6pOYwxjYSIMHZQOm/fMoQWEaFc/swi/vz2Sg4cKQ12NNMI+drd5GuR+AKIFJFU4FPgWuCFOqczxgRMz7ZxzJl0CuNP7siri7dz9qOf8+73uzh2uRZzvPO1u8nXIiGqWghcBDyuqhcCveuRzxgTQC0iQrn7/N68c8sptImLZNLM5dwzZ3WwY5lGpKTcSagfu5tERE4CrgDed++zeQKMaeROSIvn7VuGcO2Qjry4cBuvLN4W7EimkSgrV68zwILvReJW4A/AW+7lRzsB8+uRzxjTQBwhwp9H9uKM7snc/c5qvt2yL9iRTCPg1+4mVf1CVUep6j/d25tV9bf1zGiMaSCOEOHfY/uT3jKaX7+8jJ37jwQ7kgmyUn90N4nIdBE5wcOxGBG5TkSu8PIew0VkvYjkiMjkao5PEZEV7q8NIrK/0rF0EflIRNaKyBoR6ej1OzLGVCs+Koynr8mipMzJhJeWcrDIRj0dz0r9NLrpSeAv7l/Sr4vIkyLynIh8iWsIbCww21NjEXEATwC/AnoB40SkV+VzVPU2Vc1U1UzgceDNSodfAh5S1Z7AIGCP1+/IGONR5+QWPHZ5fzb8dIjLn15EfkGx90amWSotdxJe3+4mVV2hqmOAgbh+2X8JzAFuUNV+qvpvVa3pb9kgIMfdPVUCzAJG13D+ONzraLuLSaiqfuzOUuAeYWWMqYeh3VOYfnUWG38qYMx/FrL7QFGwI5kg8Et3UwX3L+gFqjpTVd9W1fU+5kgFdlTaznXv+wUR6QBkAJ+5d3UD9ovImyKyXEQecl+ZGGPqaWj3FF66bhA/HSzmkmnfsC3/cLAjmQbmr+6m+qruWsbTEz1jgdmqWu7eDgVOBe7AdSXTCRj/iw8QmSAiS0VkaV5eXv0TG3OcyO6UxKs3ZlNQXMaFT37Dwk35wY5kGpBfupv8IBdoX2k7Ddjl4dyxuLuaKrVd7u6qKsO1hOqAqo1UdbqqZqlqVnJysp9iG3N86JuWwFu/GULLmHCufHYxL3y9xZ7MPk74tbupMhEJEZE4H09fAnQVkQwRCcdVCOZU857dgURgYZW2iSJS8Zv/TGBNbfMaY2qW0SqGt35zMkO7J3PPu2u4840fKC4r997QNGl+nbtJRF4VkTgRicH1i3q9iPzeWzv3FcBEYB6wFnjN/TDevSJSeZrxccAsrfRPGHe30x3ApyKyElfX1dO+5DXG1E5sZBjTr8rit2d24bWludzw4lIKS8qCHcsEUImfpwrvpaoH3c9EzAXuBJYBD3lrqKpz3W0q77uryvY9Htp+DPT1MaMxph5CQoTbz+lOWmI0k9/8gSufWczz4wcRHx0W7GgmAEr9PFV4mIiEARcA76hqKZ5vQBtjmrAxA9vzxOUDWLnzAJdNX8ieQzZEtrkpdypOxa+jm/4DbAVigC/cw1UP1jmhMaZR+9UJbXlu/EC25Rdy8VPfsOGnQ8GOZPyotNwJ4Ne5mx5T1VRVHaEu24Ch9UppjGnUTu2azMwJgykqdXLRk9/w2bqfgh3J+MnRIuGv7iYRudV941pE5FkR+Q7XaCNjTDOW2T6BOROH0LFVNNe/uJTpX2yyIbLNQFm5679hmMN/z0lcp6oHgXOAZFwr0z1Qx3zGmCakbXwUr990MiP6tOXvc9fx+Gc5wY5k6ul/3U3eS4Cvo5sqys0I4HlV/V5EvJcgY0yzEBXu4PFx/YkIDeHRjzfQrXUsw/u0CXYsU0cl/u5uAjyVkIYAABaKSURBVJaJyEe4isQ8EYkFnHUNaIxpekJChL9fdAKZ7RO4/bUVrP3Rxq40VUe7m/w4Lcf1wGRgoHsm1nBcXU7GmONIZJiD6VedSGxkKDe8uNSmGm+ijnY3+WsIrKo6cc279GcReRg4WVV/qEdGY0wTlRIXyfSrsthbUMzNLy/jcLE9md3UVHQ3+W3uJhF5ANc612vcX78VkX/UPaIxpinr1z6BR8dk8t32/VzxzGL2F5YEO5KphYruJn/OAjsCGKaqz6nqc8BwYGRdAxpjmr6Rfdvy5BUDWLPrIGOnLyLvkHU9NRV+725yS6j0Or52kYwxzdG5vdvw7PgstuUXMuY/C9m5/0iwIxkflLqvJPw5Vfg/gOUi8oKIvIhrcr+/1zWgMab5OLVrMjOuH8TegmLGTrdC0RRUXEn4rbtJVWcCg4E33V8nqeqsukc0xjQnWR1bMuP6bPYXljJu+iJ2WaFo1PzW3SQiAyq+gLa4VovbAbRz7zPGGMA1hceM67P5+XAJY61QNGq16W7y9sT1IzUcU2z+JmNMJZntE5hxQzZXPbOYsdMX8eqN2aQlRgc7lqnCb91Nqjq0hq+jBUJEhtU3tDGmeagoFPsLSxgzbSFb9h4OdiRTRaBGN9Xkn356H2NMM5DZPsE1zXiZk0unLWT9bluPojGpeE4itAGLhE32Z4w5Ru928bx202BCBC6bvpBVOw8EO5JxOzrBnx+nCvfG4wTzIjJcRNaLSI6ITK7m+BQRWeH+2iAi+6scjxORnSIy1U9ZjTENpEtKLK/ffBIx4aGMf/5bduwrDHYkQ6V7Eg14JVEtEXEATwC/AnoB40SkV+VzVPU2Vc1U1UzgcVxDbCv7G/B5IHMaYwKnQ1IML143kJIyJ9e9sIQDR0qDHem4F4zupq0e9g8CclR1s6qWALOA0TW8zzhgZsWGiJwItAY+8lNOY0wQdEmJZdpVJ7I1/zC/eWXZ0X/JmuAISHeTiJwsIpeLyNUVXxXHVPUiD81ScT1XUSHXva+69+8AZACfubdDcA3B/b2vGY0xjdfJnVvxj4v68nVOPn98cyXlTlsGNVhqs8a1TyvTicgMoDOwAih371bgJW9Nq9nn6W/GWGC2qla8/2+Auaq6o6ZF8ERkAjABID093UscY0wwXXJiGtvzD/PYZzms2nWQv4zsycldWgU71nGnrFxxhAghId6vJHxdvjQL6KW1XwE9F2hfaTsN2OXh3LHALZW2TwJOFZHfAC2AcBEpUNVjbn6r6nRgOkBWVpb908SYRu62Yd3o1iaWBz5Yx+XPLObsnq2567xepCfZQ3cNpbTc6VNXE/je3bQKqMuCtkuAriKSISLhuArBnKoniUh3IBFYWLFPVa9Q1XRV7QjcAbxUtUAYY5oeEeG8vu345PbT+X/Du7Nocz5jpy+0G9oNqKTc6dODdOB97qZ3RWQO0ApYIyLzRGROxZe3N1fVMmAiMA9YC7ymqqtF5F4RGVXp1HHArDpcqRhjmqjIMAe/OaMLL9+QzU+Hirn7nVXBjnTcKCtXn4uEt+6mh+sbRlXnAnOr7LuryvY9Xt7jBeCF+mYxxjQ+me0T+O2ZXZnyyQbO6tma8/u1C3akZq823U01FglV/RxARDKAH1W1yL0dhWtoqjHG1NstQzszf/0e/vTWSgZ2bEmb+MhgR2rW/NbdVMnrQOWBzeXufcYYU2+hjhCmXJZJablyx+vf47ThsQFVm+4mX4tEqPthOADcr8PrkM0YY6qV0SqGv5zXi69y9nLve2uwW5SB47fupkryRGSUqs4BEJHRwN465jPGmGqNG9SeTXkFPPvVFgDuPr8XNT0nZeqmtBbdTb4WiZuBV9yT7Amup6ivrrmJMcbUjojw55E9AaxQBFBpufo0bxP4WCRUdRMwWERaAKKqNjm8MSYgqhaKMIfwp5G9vLQytVFa7iTcz91NiMhIoDcQWVHVVfXeugQ0xpiaVBSKI6XlPP3lFkac0Jb+6YnBjtVs1Ka7yaezRGQacBkwCVd306VAh7oGNMYYb0SEP47oSXJsBH99d42NePKj2nQ3+Tq66WRVvRr4WVX/imtepfZe2hhjTL20iAjlzuE9WLFjP+98vzPYcZqN2nQ3+Vokjrj/LBSRdkAprmm9jTEmoC7qn0q/tHge+GAdh4vLgh2nWfB7dxPwnogkAA8B3+FaZGhmjS2MMcYPQkKEu87vzU8Hi5n2+aZgx2kWyvzd3aSqf1PV/ar6Bq57ET2qzr9kjDGBcmKHRC7IbMf0LzbbOtl+UOLvqcJFJFJEbheRN4FXgetExCZXMcY0mDt/1YMwRwjXvbCEnw+XeG9gPHLdk/Bvd9NLuIa/Pg5MBXoCM+qUzhhj6qBtfBTTrz6RbfsKGf/CErs/UQ+u7ib/3rjurqrXq+p899cEoFudExpjTB2c3LkVU8f1Z9XOA0yYsZTisnLvjcwvBGIW2OUiMrhiQ0Syga/rkM0YY+rlnN5tePDivnydk89vZy6ntNzpvZE5Rm26m2p84lpEVgIKhAFXi8h293YHYE09cxpjTJ1cfGIah4pKuefdNdz23xX867JMn0frmNp1N3mbluO8+scxxhj/Gz8kg9Jy5f65a3GECI+OycQRYhMBeuN0KmVOPy1fqqrb/JLKGGMC4MbTOlHmVP754TocIcJDl/SzQuFFqdPVPefvexJ1JiLDRWS9iOSIyORqjk8RkRXurw0ist+9P1NEForIahH5QUQuC3RWY0zT8+szOvO7Yd1487ud/GPu2mDHafTKyl1zYPl70aE6EREH8AQwDMgFlojIHFU9ej9DVW+rdP4koL97sxC4WlU3uqcCWSYi81R1fyAzG2OanklndSWvoJhnvtrCkC6tGNojJdiRGq2KG/2N5UpiEJCjqpvdS57OAkbXcP443NN9qOoGVd3ofr0L2AMkBzivMaaJ+uOInvRsG8fvXv+ePQeLgh2n0SppZEUiFdcqdhVy3ft+QUQ64Jo08LNqjg3Ctaa2TdxijKlWZJiDx8f150hJObe9tsKmFvegtt1NgS4S1aXw9F9uLDBbVY95OkZE2uJ6uvtaVf3FgGgRmSAiS0VkaV5eXr0DG2Oari4pLbhnVC++zsln2hf2b8rqNLbuplyOXXciDdjl4dyxVJlZVkTigPeBP6vqouoaqep0Vc1S1azkZOuNMuZ4NyarPSP7tuWRjzbwzJebUbUrisr2F5YCEB3u8On8QBeJJUBXEckQkXBchWBO1ZNEpDuQCCystC8ceAt4SVVfD3BOY0wzISI8eHFfhvVszX3vr+U3r3zHoaLSYMdqNJZs3QdAv/YJPp0f0CKhqmXARGAesBZ4TVVXi8i9IjKq0qnjgFl6bMkfA5wGjK80RDYzkHmNMc1DTEQoT105gD+O6MFHa35i9NSv2fjToWDHahQWb9lHh6Ro2sZH+XS+NKdLsaysLF26dGmwYxhjGpFFm/OZ+OpynKrMvHEw3dvEBjtS0DidSv+/fcy5vVvz4CX9ju4XkWWqmlVdG5vsxBjTrA3ulMTsm08izCFc8cwicvYcv1cU63Yf4sCRUrIzknxuY0XCGNPsdWwVw6s3DkZEGPf0YjblFQQ7UlAs3pIPQHanlj63sSJhjDkudE5uwcwbs1FVLn96Eat3HQh2pAa3aHM+aYlRpCVG+9zGioQx5rjRJSWWV25wLY1z0ZPf8OZ3uUFO1HCcTuXbLfsY3Mn3riawImGMOc50bxPLe5NOJbN9Are/9j13v7OKkrLmv3DRxj0F/FxYSnaG711NYEXCGHMcSo6N4OUbsrnhlAxeXLiN8c9/S1Fp814KddFm1/0Iu5IwxhgfhDlC+PN5vXj40n4sdA+TLWvGS6Eu3pJPakIUaYm+PR9RwYqEMea4dsmJadxzfm8+WfsTd76xsllODKiqLN68j+yMlojUblGmgK4nYYwxTcE1J3fk58IS/vXJRhKjw/jTyJ61/mXamOXsKSD/cEmthr5WsCJhjDHArWd15efDJTzz1Rbio8KYdFbXYEfym0VbXPM11fZ+BFiRMMYYwDUx4N3n9+ZgURmPfLyB6IhQrj8lI9ix/GLx5nzaxEWS3tL35yMqWJEwxhi3kBDhoUv6UlhSxt/eW0OLCAeXDUwPdqx6+yH3AAM6JNSpC81uXBtjTCWhjhAeG9ef07olM/nNlby1vGk/cHegsJTt+wrpkxpfp/ZWJIwxpoqIUAf/ufJEBnZsyW3//Z4bXlzSZOd7WuWefuQEKxLGGOM/UeEOXrpuEHcO78Gizfs4d8oX3P3OKg42sQWMVu50FYk+7axIGGOMX0WGOfj1GZ1Z8PszuGxge2Ys2satM5c3qSVRV+08QGpCFIkx4XVqb0XCGGO8aNUigvsvPIG7zuvF/PV5zFi0LdiRfLZq54E6dzWBFQljjPHZNSd35PRuydz//tomsRzqwaJStuYX0ic1rs7vYUXCGGN8JCI8dGlfYiJCuXXWCorLGvekgKt3HgSo88gmaIAiISLDRWS9iOSIyORqjk8RkRXurw0isr/SsWtEZKP765pAZzXGGG9SYiN58OK+rPnxIA99uL5R359YtbN+I5sgwA/TiYgDeAIYBuQCS0RkjqquqThHVW+rdP4koL/7dUvgbiALUGCZu+3PgcxsjDHenN2rNVcOTueZr7aw/qdD3HVeL7q2jg12rF9YufMA7eIjSWoRUef3CPQT14OAHFXdDCAis4DRwBoP54/DVRgAzgU+VtV97rYfA8OBmQFNbIwxPrjn/N50Tm7BlI83MPzfX3LV4A6c1TOFolInRaXlRISGcGaPFEIdwevVX7XrAL3rcRUBgS8SqcCOStu5QHZ1J4pIByAD+KyGtqkByGiMMbUW6gjh2iEZjOrXjkc/3sBLC7fywjdbjzmnT2oc/7y4L73r+IxCfRQUl7Fl72EuyKzfr81AF4nqJgrx1IE3FpitqhV3gnxqKyITgAkA6elNf44VY0zTkuQeHjvhtE7sOVRMZKiDyLAQ1u4+xL3vrmHU1K+ZcFonbj2rK5FhjgbLtXrnAVTrdz8CAl8kcoH2lbbTgF0ezh0L3FKl7RlV2i6o2khVpwPTAbKyshrvHSRjTLPWISmGDkkxR7e7to7ltK6tuP/9tTy1YBMzv93Oub3aMLJvW07qnERYgLuhVu1yjWzqXY/hrxD40U1LgK4ikiEi4bgKwZyqJ4lIdyARWFhp9zzgHBFJFJFE4Bz3PmOMaRISosN56NJ+/HfCYIZ2T+H9lT9y9XPfkv33T3ljWW5AR0at2nmA1nERpMRG1ut9AnoloaplIjIR1y93B/Ccqq4WkXuBpapaUTDGAbO00k9MVfeJyN9wFRqAeytuYhtjTFOS3SmJ7E5JFJWW88WGPJ7+cjO/e/17Pt+Qx30X9iEuMszvn7mynk9aV5DGPMa3trKysnTp0qXBjmGMMTUqdypPLchhyicbaRMXyY2nZrDnUDHb9xXy44EiOrSMZkCHRLI6JtItJZaQkNqtA3G4uIw+98zj1rO68n9nd/N6vogsU9Ws6o7ZokPGGNPAHCHCxDO7cnKXVvzfrBXc8+4aQkOEtMQoWsdF8sXGvby5fCcACdFhnNOrNSNOaMuQLq18upfxVc5eVOs+82tlViSMMSZIBqQn8vHtp5F3qJg2cZFHn6lQVbbvK2TZtp/5fEMec1fu5rWlucRHhdGrbRxt4yNpmxBJt9axnN+33TFXGlv3Hub/zf6Bbq1bMKRLq3pntCJhjDFBFBHqIC3x2LWnReToaKmLBqRRXFbOVxv3Mm/1bjblHWbxln3sPlhEuVN5a/lO/nVZJgnR4RwsKuX6F5cQIvDM1QOJCq//kFsrEsYY08hFhDo4q2drzurZ+ui+cqcy89vt/PXd1Zw/9SueuHwAj3y0gW35hbx8QzbpSdE1vKPvrEgYY0wT5AgRrhzcgd7t4vjNK98xaurXAPzjohMY3CnJb59jRcIYY5qw/umJvDfpFP701iq6t4ll3CD/zjxhRcIYY5q4pBYRTLvqxIC8ty06ZIwxxiMrEsYYYzyyImGMMcYjKxLGGGM8siJhjDHGIysSxhhjPLIiYYwxxiMrEsYYYzxqVutJiMghYH0dmsYDB2p5rOr+mrYrXlf9sxWwtwnlpY6Za8rr6Xh98lbeZ3mbZ15PGb1lt7zVH++gqsnVnq2qzeYL12p3dWk3vbbHqu6vabvidTV/Nqm8dc1cU15Px+uTt74/Y8vb+PN6yuMtu+X1frzql3U3ubxbh2NV99e0/a6HP+uqOeX1dLw+eX35zNrm8Xbc8vrOH3mr7vP22vL6fvwYza27aal6WIKvMWpqeaHpZba8gWV5A6sx5G1uVxLTgx2glppaXmh6mS1vYFnewAp63mZ1JWGMMca/mtuVhDHGGD+yImGMMcYjKxLGGGM8Om6KhIicKiLTROQZEfkm2Hm8EZEQEblfRB4XkWuCnccbETlDRL50/4zPCHYeX4hIjIgsE5Hzgp3FGxHp6f7ZzhaRXwc7jy9E5AIReVpE3hGRc4KdxxsR6SQiz4rI7GBnqY777+uL7p/pFQ31uU2iSIjIcyKyR0RWVdk/XETWi0iOiEyu6T1U9UtVvRl4D3ixsecFRgOpQCmQG6is7lz+yKtAARBJ08gLcCfwWmBSHpPLH39/17r//o4BAj4k0k+Z31bVG4HxwGUBjOuvvJtV9fpA5qyqlrkvAma7f6ajGixkbZ/mC8YXcBowAFhVaZ8D2AR0AsKB74FewAm4CkHlr5RK7V4D4hp7XmAycJO77ewmkDfE3a418EoTyHs2MBbXL7DzGnted5tRwDfA5YHM68/M7naPAAOaUN6A/v9Wj9x/ADLd57zaUBlDaQJU9QsR6Vhl9yAgR1U3A4jILGC0qv4DqLb7QETSgQOqejCAcf2SV0RygRL3Znng0vrv5+v2MxARiJwV/PTzHQrE4Pqf74iIzFVVZ2PN636fOcAcEXkfeDUQWSt9lj9+xgI8AHygqt819rzBUJvcuK7Q04AVNGAvUJMoEh6kAjsqbecC2V7aXA88H7BENatt3jeBx0XkVOCLQAbzoFZ5ReQi4FwgAZga2GjVqlVeVf0TgIiMB/YGqkDUoLY/3zNwdTdEAHMDmsyz2v4dnoTrii1eRLqo6rRAhqtGbX/GScD9QH8R+YO7mASDp9yPAVNFZCT1nyrHZ025SEg1+2p8MlBV7w5QFl/UKq+qFuIqasFS27xv4ipswVLrvw8AqvqC/6P4pLY/3wXAgkCF8VFtMz+G6xdbsNQ2bz5wc+Di+Kza3Kp6GLi2ocM0iRvXHuQC7SttpwG7gpTFF5Y3sCxv4DW1zE0tb4VGlbspF4klQFcRyRCRcFw3IecEOVNNLG9gWd7Aa2qZm1reCo0rd0PdIa/nCICZwI/8bzjo9e79I4ANuEYC/CnYOS2v5W0OeZti5qaWtynltgn+jDHGeNSUu5uMMcYEmBUJY4wxHlmRMMYY45EVCWOMMR5ZkTDGGOORFQljjDEeWZEwJoBEpCDYGYypDysSxjQwEXEEO4MxvrIiYUwDENfKffNF5FVgZbDzGOOrpjwLrDFNzSCgj6puCXYQY3xlVxLGNJxvrUCYpsaKhDEN53CwAxhTW1YkjDHGeGRFwhhjjEc2VbgxxhiP7ErCGGOMR1YkjDHGeGRFwhhjjEdWJIwxxnhkRcIYY4xHViSMMcZ4ZEXCGGOMR1YkjDHGePT/ATfiyTOZMMlMAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "batch_size = 256\n",
    "lrfinder = model.lr_finder(x_train, y_train, batch_size, tolerance=2)\n",
    "_ = lrfinder.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1873817422860396"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrfinder.get_best_lr()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Often, this learning rate is a little high, so we instead set it manually to 0.01"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.optimizer.set_lr(0.01)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We include the `EarlyStopping` callback to stop training when the validation loss stops improving. After training, this callback will also load the best performing model in terms of validation loss."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "epochs = 512\n",
    "callbacks = [tt.callbacks.EarlyStopping()]\n",
    "verbose = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0:\t[0s / 0s],\t\ttrain_loss: 0.7162,\tval_loss: 0.6546\n",
      "1:\t[0s / 0s],\t\ttrain_loss: 0.6317,\tval_loss: 0.6570\n",
      "2:\t[0s / 0s],\t\ttrain_loss: 0.6778,\tval_loss: 0.6638\n",
      "3:\t[0s / 0s],\t\ttrain_loss: 0.6556,\tval_loss: 0.6440\n",
      "4:\t[0s / 0s],\t\ttrain_loss: 0.6288,\tval_loss: 0.6493\n",
      "5:\t[0s / 0s],\t\ttrain_loss: 0.6078,\tval_loss: 0.6377\n",
      "6:\t[0s / 0s],\t\ttrain_loss: 0.6308,\tval_loss: 0.6464\n",
      "7:\t[0s / 0s],\t\ttrain_loss: 0.6238,\tval_loss: 0.6464\n",
      "8:\t[0s / 0s],\t\ttrain_loss: 0.6239,\tval_loss: 0.6481\n",
      "9:\t[0s / 0s],\t\ttrain_loss: 0.5940,\tval_loss: 0.6544\n",
      "10:\t[0s / 0s],\t\ttrain_loss: 0.6091,\tval_loss: 0.6639\n",
      "11:\t[0s / 0s],\t\ttrain_loss: 0.6085,\tval_loss: 0.6455\n",
      "12:\t[0s / 0s],\t\ttrain_loss: 0.5987,\tval_loss: 0.6498\n",
      "13:\t[0s / 0s],\t\ttrain_loss: 0.5791,\tval_loss: 0.6623\n",
      "14:\t[0s / 0s],\t\ttrain_loss: 0.5931,\tval_loss: 0.6507\n",
      "15:\t[0s / 0s],\t\ttrain_loss: 0.5994,\tval_loss: 0.6626\n",
      "CPU times: user 1.68 s, sys: 69.2 ms, total: 1.75 s\n",
      "Wall time: 813 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "log = model.fit(x_train, y_train, batch_size, epochs, callbacks, verbose,\n",
    "                val_data=val.repeat(10).cat())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "_ = log.plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can get the partial log-likelihood"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-4.979775905609131"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.partial_log_likelihood(*val).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prediction\n",
    "\n",
    "For evaluation we first need to obtain survival estimates for the test set.\n",
    "This can be done with `model.predict_surv` which returns an array of survival estimates, or with `model.predict_surv_df` which returns the survival estimates as a dataframe.\n",
    "\n",
    "However, as `CoxCC` is semi-parametric, we first need to get the non-parametric baseline hazard estimates with `compute_baseline_hazards`. \n",
    "\n",
    "Note that for large datasets the `sample` argument can be used to estimate the baseline hazard on a subset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "_ = model.compute_baseline_hazards()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "surv = model.predict_surv_df(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "surv.iloc[:, :5].plot()\n",
    "plt.ylabel('S(t | x)')\n",
    "_ = plt.xlabel('Time')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluation\n",
    "\n",
    "We can use the `EvalSurv` class for evaluation the concordance, brier score and binomial log-likelihood. Setting `censor_surv='km'` means that we estimate the censoring distribution by Kaplan-Meier on the test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "ev = EvalSurv(surv, durations_test, events_test, censor_surv='km')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6558738769282929"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ev.concordance_td()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "time_grid = np.linspace(durations_test.min(), durations_test.max(), 100)\n",
    "_ = ev.brier_score(time_grid).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1667853479188019"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ev.integrated_brier_score(time_grid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4971520413959927"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ev.integrated_nbll(time_grid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
